﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Media;

namespace iNet.Windows
{
	/// <summary>
	/// 提供 FrameworkElement 相關的延伸功能。
	/// </summary>
	public static class FrameworkElementExtensions
	{
		#region FindElement
		/// <summary>
		/// 使用深度優先搜尋法 (Depth-First Search) 尋找第一個符合指定名稱的 FrameworkElement。
		/// </summary>
		/// <param name="rootElement">作為搜尋起點的 FrameworkElement。</param>
		/// <param name="name">指定的名稱。</param>
		/// <returns>第一個符合指定名稱的 FrameworkElement。</returns>
		public static FrameworkElement FindElement(this FrameworkElement rootElement, string name)
		{
			//確認參數
			if (rootElement == null || name == null)
				return null;

			//確認根元素
			if (rootElement.Name == name)
				return rootElement;

			//搜尋子元素
			for (int i = 0, count = VisualTreeHelper.GetChildrenCount(rootElement); i < count; ++i)
			{
				FrameworkElement element = FindElement(VisualTreeHelper.GetChild(rootElement, i) as FrameworkElement, name);
				if (element != null)
					return element;
			}
			return null;
		}
		#endregion
	}
}
